﻿using System;
using System.Collections.Generic;
using System.Text;
using SistemaLib.sipe.db.sqlserver;
using SistemaLib.Entidades;
using SistemaLib.sipe.db.general;
using SistemaLib.sipe.util;
using System.Data;

namespace SistemaLib.Persistencia
{
    public class DbEstimacionCostos : DbBase
    {
        private void Agregar(EstimacionCosto ec)
        {
            DbScriptGenerator sql = new DbScriptGenerator();

            sql.Tabla = "EstimacionesCostos";
            sql.addCampo("idTarea");
            sql.addCampo("costoEstimado");
            
            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idTarea", DbTipo.Entero, 0, ec.IdTarea));
            col.Add(DbConnection.SqlInputParam("@costoEstimado", DbTipo.Float, 0, ec.CostoEstimado));


            object id;
            this.DbConnection.RunScalarProcedure(sql.getInsert(), col, CommandType.Text, out id);

            ec.Id = int.Parse(id.ToString());
        }

        private void Modificar(EstimacionCosto ec)
        {
            DbScriptGenerator sql = new DbScriptGenerator();

            sql.Tabla = "EstimacionesCostos";
            sql.CampoClave = "id";
            sql.addCampo("idTarea");
            sql.addCampo("costoEstimado");

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, ec.Id));
            col.Add(DbConnection.SqlInputParam("@idTarea", DbTipo.Entero, 0, ec.IdTarea));
            col.Add(DbConnection.SqlInputParam("@costoEstimado", DbTipo.Float, 0, ec.CostoEstimado));

            object id;
            this.DbConnection.RunScalarProcedure(sql.getUpdate(), col, CommandType.Text, out id);
        }

        internal void Eliminar(int idET)
        {
            string sql = "delete from EstimacionesCostos where id = @id";

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, idET));

            int cant;
            this.DbConnection.RunNonQueryProcedure(sql, col, CommandType.Text, out cant);
        }

        internal void Guardar(EstimacionCosto ec)
        {
            if (ec.Id == 0)
                Agregar(ec);
            else
                Modificar(ec);
        }

        private void Cargar(DataRow fila, EstimacionCosto obj)
        {
            obj.Id = ObtieneCampo.TipoInt(fila, "id");
            obj.IdTarea = ObtieneCampo.TipoInt(fila, "idTarea");
            obj.CostoEstimado = ObtieneCampo.TipoMoneda(fila, "costoEstimado");
        }

        public EstimacionCosto CargarEstimacionCostos(int idTarea)
        {
            EstimacionCosto obj = new EstimacionCosto();

            string sql = @"select * from EstimacionesCostos where idTarea = @idTarea";

            DataSet ds;

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idTarea", DbTipo.Entero, 0, idTarea));

            this.DbConnection.RunDataSetProcedure(sql, col, CommandType.Text, out ds);

            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                DataRow fila = ds.Tables[0].Rows[0];
                Cargar(fila, obj);
            }

            return obj;
        }
    }
}
